OpenBSD PF
PF 是 OpenBSD 自带的防火墙,并且默认启动。
启用 PF:
pfctl -e
禁用 PF:
pfctl -d
如果要禁止 PF 的开机后默认启动,停止服务即可:
rcctl disable pf
PF 启动后会从 /etc/pf.conf 加载配置,如果编辑了文件需要让 PF 立即生效,执行:
pfctl -f /etc/pf.conf
显示当前生效的规则:
pfctl -sr 或 pfctl -s rules
1. 规则语法
PF 加载规则时会忽略掉空行及注释行(“#”开头)。
列表:{},用来表示多项内容,列表会被 PF 展开成多条相同规则,比如多个IP地址:{192.168.1.102, 192.168.1.103}。
宏:类似程序语言中的变量定义,最终也会被 PF 展开,如:
freebsd_host = "192.168.1.103" block on em0 proto icmp from $freebsd_host
指定 IP 时,直接使用点分 IP 格式即可,如 192.168.1.101;还可以指定 IP,如:192.168.1.0/24。
例,屏蔽 192.168.1.106 对主机 22 端口的访问:
block in on em0 proto tcp from 192.168.1.106 to port 22
注意:指定 port 时,必须指定 proto 为 tcp
或 udp
。
例,只允许外部访问 80 端口:
block on em0 all pass in on em0 proto tcp from any to port 80
以上示例,第一行首先阻断全部访问;第二行,只允许 80 端口的访问。若是没有第一句,规则将不会生效。
PF 也能屏蔽指定的协议,比如屏蔽 ICMP 协议:
block on em0 proto icmp
2. 更多资料
- User's Guide - OpenBSD PF:https://www.openbsd.org/faq/pf/